package com.xique.park.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xique.common.datascope.annotation.NeedSetDictLabel;
import com.xique.park.bean.domain.ParkOn;
import com.xique.park.bean.request.comm.ParkOnListRequest;
import com.xique.park.controller.client.web.bean.request.ClientParkOnListRequest;
import com.xique.park.controller.client.web.bean.vo.ClientHandOutParkInInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 在场车辆Mapper接口
 *
 * @author xique
 * @date 2021-12-09
 */
@Mapper
public interface ParkOnMapper extends RootMapper<ParkOn> {

    /**
     * 查询在场车辆数
     */
    Long selectParkOnCount(ParkOn parkOn);

    /**
     * 根据车牌号查询在场车辆
     *
     * @param parkId parkId
     * @param plate  车牌号
     * @return 在场车辆列表
     */
    List<ParkOn> selectParkOnByPlate(@Param("parkId") Long parkId,
                                     @Param("plate") String plate);

    List<ParkOn> selectParkOnBaseList(ParkOn parkOn);

    @NeedSetDictLabel
    List<ParkOn> selectParkOnList(ParkOn parkOn);

    /**
     * 手动出场-模糊查询在场车辆列表
     */
    List<ClientHandOutParkInInfoVo> getHandOutParkInInfoVoList(ParkOn parkOn);

    List<ParkOn> getClientParkOnList(ClientParkOnListRequest request);

    List<ParkOn> clientSelectParkOnList(ParkOn parkOn);

    /**
     * 根据查询条件查询在场车辆列表
     *
     * @param request 查询条件
     * @return 在场车辆列表
     */
    List<ParkOn> selectParkOnAllList(@Param("request") ParkOnListRequest request);

    /**
     * 根据在场ID查询在场信息和进场信息
     *
     * @param id 在场ID
     * @return 在场信息和进场信息
     */
    ParkOn selectParkOnAndParkInById(Long id);

    /**
     * 分页查询在场记录列表
     *
     * @param page   分页参数
     * @param search 查询条件
     * @return 分页查询结果
     */
    IPage<ParkOn> selectParkOnPage(@Param("page") Page<ParkOn> page,
                                   @Param("search") ParkOnListRequest search);

    /**
     * 不分页查询在场记录列表
     */

    List<ParkOn> selectParkOnPage(@Param("search") ParkOnListRequest search);

    /**
     * 查找指定日期之前的记录
     *
     * @param parkId        车场ID
     * @param beforeDateStr 指定日期
     * @return 在场记录列表
     */
    List<ParkOn> selectParkOnListBeforeDay(@Param("parkId") Long parkId,
                                           @Param("beforeDateStr") String beforeDateStr);

    /**
     * 根据车场ID和车牌列表获取在场记录信息
     *
     * @param parkId    车场ID
     * @param plateList 车牌列表
     * @return 在场记录信息
     */
    List<ParkOn> selectParkOnByPlateList(@Param("parkId") Long parkId,
                                         @Param("plateList") List<String> plateList);
}
